home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-12-27 | 41.8 KB | 1,299 lines |
-
- WindGem 1.5 décembre 1996
- -----------
- Librairie Gem Etendue pour le SozobonX C.
- (Utiliser une tabulation de 8 caractères)
-
- <=-----------------------------------------------------------------------=>
- SOMMAIRE
-
- 1> Introduction et remerciements
- 2> Système requis
- 3> Installation
- 4> Utilisation
- 5> Fonctionnalités
- 5.1> Types étendus pour les fichiers .RSC
- 5.2> Variables de la librairie
- 5.3> Fonctions de la librairie
- 5.3.1> AjouteAide
- 5.3.2> AjouteMenu
- 5.3.3> AjoutePopup
- 5.3.4> AjouteToolBar
- 5.3.5> AppInit
- 5.3.6> AppExit
- 5.3.7> EffaceChamp
- 5.3.8> EnleveMenu
- 5.3.9> EnleveToolBar
- 5.3.10> EventMulti
- 5.3.11> FormAlert
- 5.3.12> GetCoord
- 5.3.13> GetHandle
- 5.3.14> GetObjet
- 5.3.15> GetObject
- 5.3.16> GetValeur
- 5.3.17> GetVar
- 5.3.18> GetWindText
- 5.3.19> GetWorkXYWH
- 5.3.20> PopMenu
- 5.3.21> pop_up
- 5.3.22> ObjcUnselect
- 5.3.23> SetSlider
- 5.3.24> SetValeur
- 5.3.25> SetWindText
- 5.3.26> StGuide
- 5.3.27> ToolBarSelect
- 5.3.28> ToolBarUnselect
- 5.3.29> WindAlerte
- 5.3.30> WindClose
- 5.3.31> WindDelete
- 5.3.32> WindDraw
- 5.3.33> WindFormInit
- 5.3.34> WindOpen
- 5.3.35> WindTextInit
- 5.3.36> WindUserInit
- 5.3.37> wmenu_icheck
- 5.4> Fonctions utilitaires diverses
- 5.4.1> convdate
- 5.4.2> cre_fichier
- 5.4.3> EnvoiRedraw
- 5.4.4> exist
- 5.4.5> extention
- 5.4.6> get_text
- 5.4.7> GetCharSize
- 5.4.8> GetDeskXYWH
- 5.4.9> GetVideoRes
- 5.4.10> litdate
- 5.4.11> Sauvegarde / Restauration d'une zone de l'écran
- 5.4.12> selector
- 5.4.13> set_text
- 5.4.14> strcomplete
- 5.4.15> strcopy
- 5.4.16> strinsert
- 5.4.17> strleft
- 5.4.18> strmid
- 5.4.19> strnpcpy
- 5.4.20> strright
- 5.4.21> trim
- 5.5> Conclusion
-
- 6> Evolutions futures
- 7> Retours
-
-
- <=-----------------------------------------------------------------------=>
- 1> Introduction
-
- Il existe dans le domaine public de nombreuses librairies GEM
- permettant d'en étendre ses foncionnalités.
-
- Malheureusement, aucune n'a été portée pour le SozobonX C.
-
- Après une tentative de portage de la librairie Egem220 qui n'a
- abouti à rien de réellement fonctionnel, j'ai décidé d'écrire la mienne.
-
- Evidemment, elle est loin d'offrir toutes les fonctionnalités d'une
- librairie comme Egem ou encore Big ou Eglib. Cependant, elle offre le
- minimum nécessaire pour gérer les formulaires en fenêtres de manière modale
- ou non et ce, de la manière la plus simple possible à utiliser.
-
- Je remercie Claude Attard pour ses articles dans St-Magazine et
- tous ceux qui m'ont aidé à réaliser cette librairie en répondant à mes
- questions dans les News ou par Email ou tout simplement en testant cette
- librairie.
-
-
- <=-----------------------------------------------------------------------=>
- 2> Système requis
-
- Cette librairie devrait pouvoir fonctionner sur toutes la gamme,
- dans la mesure où je n'utilise aucune spécificité d'une quelconque version
- de l'AES (à l'exception de l'icônification pour les systèmes la supportant).
- Je l'ai testé sur un 1040 Stf TOS 1.2, mon Falcon 030 TOS 4.4, et
- sur mon Falcon sous Magic 4.
- Olivier Landemarre la teste régulièrement sous Magic Mac et je l'en
- remercie.
-
- Pour un fonctionnement optimum, il vaut mieux travailler avec une
- résolution >= 640*400 (les objets userdefs sont affichés en 16*16 pixels).
- Le nombre de couleurs importe peu.
-
-
- <=-----------------------------------------------------------------------=>
- 3> Installation
-
- Il suffit de copier windgem.h, aes.h et vdi.h dans le répertoire
- INCLUDE du sozobonX C et WindGem.a dans le repertoire LIB/SOZOBONX.
- Faire de même pour les librairies annexes.
-
-
- <=-----------------------------------------------------------------------=>
- 4> Utilisation
-
- Vous devez inclure WindGem.h dans vos sources et ajouter windGem.a
- dans la liste des librairies à l'édition de lien.
-
- Le plus simple est d'utiliser un fichier Makefile dans la mesure où
- le nombre de paramètres de compilation est assez important.
-
- Un exemple valant plus qu'un long discours, en voici un :
-
- **********
-
- test: test.c test.h
- cc -otest.app -O -f test.c windgem xaesfast xvdifast -lpml -lextra
-
- * -o<nomProg>
- * -O optimiseur
- * -f pour les fonctions en virgule flottante,
- * windgem[.a] doit être la PREMIERE librairie appelée,
- * Xaesfast / Xvdifast pour les fonctions Gem,
- * -lpml pour inclure les fonctions virgules flottantes utilisées.
- * -lextra pour la fonction Getcookie
-
- NOTE : pour une version inférieure à la release 15 (octobre/novembre 1995),
- qui ne contiendrait pas la librairie PML, utiliser -lm à la place de -f et
- supprimer -lpml.
-
- En complément, d'autres fichiers d'entête sont fournis avec WindGem.
-
- * xgemfast.h - version très légèrement modifier de celui qui est
- fourni avec le Sozobon C
- Modification :
- * Ajout de la structure GEMPARBLK
- * définition de ED_START, ED_INIT, ED_CHAR, ED_END
- pour compatibilité Pure C.
- * Modification de la structure OB_SPEC
- * aes.h - prototype des fonctions de l'aes
- * vdi.h - prototype des fonctions du vdi
- * falcon30.h - macros permettant d'utiliser les nouvelles
- fonctions du Falcon 030.
- * scancode.h - code SCAN + ASCII des combinaisons de touches
- spéciales (CONTROL, ALTERNATE) du clavier.
- * vt52.h - macros permettant d'utiliser les fonctions de
- l'émulateur VT52
- * s_malloc.h - prototype des fonctions de la librairie S_MALLOC
- * dragdrop.h - prototype des fonctions de la librarie Drag&Drop
- * atarierr.h - code d'erreur atari : normalement idem errno.h
-
-
- <=-----------------------------------------------------------------------=>
- 5> Fonctionnalités
-
- 5.1> Types étendus pour les fichiers .RSC
-
- Pour ce faire, il vous faudra un éditeur de ressources capable de
- modifier ce paramètre comme Orcs ou Interface.
-
- Les valeurs à employer sont les suivantes :
-
- Pour raccourcis clavier :
- UNDER_B 18 + [ devant la lettre concernée
-
- Petite écriture :
- SMALL_B 22
-
- Boutons PopUp :
- POPUP_B 24
-
- Radio-Boutons :
- RADIO_B 26
-
- Check-Box :
- CHECK_B 28
-
- Group-Box :
- GROUP_B 30
-
- Elles ne sont pour l'instant valables QUE pour des objets de type
- BUTTON et NON cumulables, mais j'essaierai d'améliorer ce fonctionnement
- par la suite.
-
-
- Note concernant les popup menus.
-
- Les objets appartenant aux arbres d'objets servant de popup menus
- doivent être SELECTABLE pour être utilisables. Les items DISABLED ne sont
- pas pris en compte.
- Depuis la version 1.4, les objets POPUP_B sont des objets Userdefs (ajout
- d'un icône à droite du bouton pour obtenir l'option suivante...). Il faut
- bien penser à ne pas coller les boutons POPUP_B tout contre le bord d'un
- formulaire (besoin de 16*16 pixels pour l'icône). Utiliser la fonction
- <AjoutePopup> pour associer un popup à un objet d'un formulaire (après
- initilisation du formulaire avec WindFormInit !). Pour plus d'information,
- se référer à l'exemple <test.c>.
-
-
- 5.2> Variables de la librairie
-
- Liste des variables mises à la disposition du programmeur :
-
- - VdiHandle,
- - AppId,
- - Ordi,
- - CurWindow,
- - AdrMenu,
- - AdrDesk.
-
- * VdiHandle contient le handle VDI associé à l'application. Il est
- ainsi possible d'utiliser n'importe quelle fonction du VDI (dans les
- fenêtres "utilisateurs" par exemple).
-
- * AppId contient le numéro de l'application récupéré par <appl_init>.
-
- * Ordi est une structure contenant un certain nombre d'informations
- concernant la machine et son système.
- Elle est composée comme suit :
-
- typedef struct
- {
- int Processor; /* Processor type */
- long Machine; /* Machine type */
- int Switch; /* Mother board switch */
- long Fdc; /* Floppy Disk Controler */
- int Keyboard; /* Keyboard type */
- int Language; /* Current Language */
- long Shifter; /* Video circuit */
- int Sound; /* Sound System */
- int Fpu; /* Flotting Point Unit */
- int Separator; /* Date separator */
- int Date; /* date format */
- int Time; /* time format */
- /* Version extract from system's call */
- int TosVersion; /* 0 Si Magic présent */
- int GemdosVersion; /* Inverser octet fort et faible */
- int AesVersion; /* Version de l'AES */
- /* Calculate from Cookie "MiNT" */
- int MultiTosVersion; /* Version de Multitos */
- /* Présence de Magic */
- int Magic; /* Vrai si Magic Présent */
- } MachineInfo;
-
- Liste des constantes prédéfinies :
-
- #define M68000 0x0000 /* Processeurs */
- #define M68010 0x000A
- #define M68020 0x0014
- #define M68030 0x001E
-
- #define ST 0x00000L /* Machines */
- #define STE 0x10000L
- #define MSTE 0x10010L
- #define TT 0x20000L
- #define FALCON30 0x30000L
-
- #define KEYB_USA 0x0 /* Clavier */
- #define KEYB_D 0x1
- #define KEYB_F 0x2
- #define KEYB_GB 0x3
- #define KEYB_SP 0x4
- #define KEYB_I 0x5
- #define KEYB_CHD 0x7
- #define KEYB_CHF 0x8
-
- #define LG_USA 0x0 /* Langue */
- #define LG_D 0x1
- #define LG_F 0x2
- #define LG_GB 0x3
- #define LG_SP 0x4
- #define LG_I 0x5
- #define LG_CHD 0x7
- #define LG_CHF 0x8
-
- #define SHIFTER_ST 0x00000L /* Circuit Video */
- #define SHIFTER_STE 0x10000L
- #define SHIFTER_TT 0x20000L
- #define VIDEL_FALCON 0x30000L
-
- #define MATRICE 0x08 /* Systeme sonore */
- #define DSP 0x04
- #define CODEC 0x02
- #define PSG 0x01
-
- #define NO_FPU 0 /* Copro. Math. */
- #define SFP004 1
- #define C68881_2 2
- #define C68881_2_SFP 3
- #define C68881 4
- #define C68881_SFP 5
- #define C68882 6
- #define C68882_SFP 7
- #define C68040 8
- #define C68040_SFP 9
-
- #define DATE_MJA 0 /* Format date */
- #define DATE_JMA 1
- #define DATE_AMJ 2
- #define DATE_AJM 3
-
- #define TIME_12 0 /* Format horaire */
- #define TIME_24 1
-
- Voir test.c pour un exemple d'utlisation.
-
- * CurWindow contient le code de l'objet WindGem en cours
- d'utilisation. (voir test.c)
-
- * AdrMenu est une variable de type OBJECT contenant l'adresse de
- l'objet menu de l'application.
-
- * AdrDesk est une variable de type OBJECT contenant l'adresse de
- l'objet bureau de l'application.
-
-
- 5.3> Fonctions de la librairie
-
- 5.3.1> AjouteAide
-
- < void AjouteAide (arbre, objet, txt) >
-
- * int arbre..................... Numéro de l'arbre d'objets
- * int objet..................... Numéro de l'objet
- * char *txt..................... Chaine contenant le message
-
- Cette fonction permet d'associer un message d'aide <txt> à un objet
- <objet> d'un formulaire <arbre>.
- Vous avez le droit à 3 lignes de textes de 40 car. au maximum.
-
- Pour indiquer un changement de ligne dans la chaine <txt>, utiliser
- le caractère '|' comme pour la fonction <form_alert> du GEM.
-
- Ex :
- AjouteAide (FORM1, BOUTON1, "Bouton1|test|test")
-
-
- 5.3.2> AjouteMenu
-
- < void AjouteMenu (numObj, menu, mode, wmenu) >
-
- * int numObj.................... Numéro de l'objet (arbre d'objet ou numéro
- retourner par une fonction d'init. d'une
- quelconque autre fenêtre.
- * int menu...................... Numéro de l'arbre d'objets du menu > 0
- * int mode...................... REDRAW -> réaffichage dynamique,
- NODRAW -> pas de réaffichage immédiat.
- * void (*wmenu)(int opt)........ Fonction de gestion du menu en fenêtre.
-
- Cette fonction permet d'ajouter un menu (dynamiquement ou non) dans
- une fenêtre d'un type quelconque.
- Le mode permet de forcer un redraw ou non de la fenêtre.
-
-
- 5.3.3> AjoutePopup
-
- < void AjoutePopup (arbre, objet, ArbrePopup) >
-
- * int arbre..................... Numéro de l'arbre d'objets considéré
- * int objet..................... Objet de type étendu POPUP_B concerné
- * int ArbrePopup................ Numéro de l'arbre d'objet qui sert de Popup
-
- Cete fonction permet d'associer un popup menu à un objet donné d'un
- arbre donné. Ensuite, tout est géré automatiquement par WindGem.
- Un objet Userdef est dessiné à la place et un icône est ajouté à la droite
- de l'objet.
-
- Fonctionnement :
- - un clic sur l'objet (zone texte) et le popup menu est affiché et
- géré comme auparavant,
- - un clic sur l'icône et l'option suivante est affichée dans la
- zone texte.
-
- Il n'est plus nécessaire d'utiliser la fonction pop_up.
-
-
- 5.3.4> AjouteToolBar
-
- < void AjouteToolBar (numObj, toolbar, mode, wtoolbar) >
-
- * int numObj.................... Numéro de l'objet (arbre d'objet ou numéro
- retourner par une fonction d'init. d'une
- quelconque autre fenêtre.
- * int toolbar................... Numéro de l'arbre d'objets ToolBar > 0
- * int mode...................... REDRAW -> réaffichage dynamique,
- NODRAW -> pas de réaffichage immédiat.
- * void (*wtoolbar)(int opt)..... Fonction de gestion de la ToolBar.
-
- Cette fonction permet d'ajouter une ToolBar (dynamiquement ou non)
- dans une fenêtre d'un type quelconque.
- Le mode permet de forcer un redraw ou non de la fenêtre.
-
-
- 5.3.5> AppInit
-
- < void AppInit(fic_rsc, desk, gereDesk, menu, gereMenu) >
-
- * char *fic_rsc................. Nom du fichier Ressource avec ou sans .rsc
- * int desk...................... Numéro de l'objet pour le bureau
- * void (*gereDesk)(int event)... Fonction de gstion du bureau
- * int menu...................... Numéro de l'objet pour le menu
- * void (*gereMenu)(int event)... Fonction de gestion du menu
-
- Cette fonction permet d'initialiser le Gem et tous les paramètres
- nécessaires à la librairie ainsi que les variables systèmes nécessaires à
- WindGem.
-
- Nouveauté décembre 1996 :
-
- Il est maintenant possible de charger le fichier ressource en
- fonction du langage de l'ordinateur.
- Pour ce faire, il suffit que le paramètre <fic_rsc> ne contienne
- pas l'extension .rsc, le programme ajoute automatiquement à la fin du nom :
-
- * F.rsc pour le francais ou le suisse français,
- * E.rsc pour l'anglais ou l'américain,
- * D.rsc pour l'allemand ou le suisse allemand,
- * I.rsc pour l'Italien,
- * S.rsc pour l'espagnol.
-
- Par défaut si la langue était "exotique" (autre langue non reconnue
- par WindGem), c'est l'anglais qui serait automatiquement choisi.
-
- Attention, la taille du paramètre fic_rsc n'est pas vérifiée, cela
- signifie que pour un système n'admettant pas les noms longs (je n'est pas
- encore Magic 5 mais je compte l'acquérir bientôt), le programmeur doit
- veiller à ce que le nom de fichier passé en paramètre ne dépasse pas 7 car.
-
-
- 5.3.6> AppExit
-
- < void AppExit(void) >
-
- Cette fonction permet de terminer l'application en fermant les
- fenêtres qui resteraient ouvertes et en les détruisant, rendant ainsi
- l'espace mémoire utilisé au système.
-
-
- 5.3.7> EffaceChamp
-
- < void EffaceChamp (arbre, objet) >
-
- * int arbre..................... Numéro de l'arbre d'objet considéré
- * int objet..................... Numéro de l'objet dont il faut effacer le
- contenu.
-
- Cette fonction permet d'effacer le contenu d'un objet d'un arbre
- d'objets donné.
-
-
- 5.3.8> EnleveMenu
-
- < void EnleveMenu (numObj, mode) >
-
- * int numObj.................... Numéro WindGem de l'objet
- * int mode...................... REDRAW : réaffichage
- NODRAW : pas de réaffichage
-
- Cette fonction permet d'enlever dynamiquement ou non un menu associé
- à un objet WindGem (formulaire, fenêtre texte, fenêtre User...).
-
-
- 5.3.9> EnleveToolBar
-
- < void EnleveToolBar (numObj, mode) >
-
- * int numObj.................... Numéro WindGem de l'objet
- * int mode...................... REDRAW : réaffichage
- NODRAW : pas de réaffichage
-
- Cette fonction permet d'enlever dynamiquement ou non une ToolBar
- associée à un objet WindGem (formulaire, fenêtre texte, fenêtre User...).
-
-
- 5.3.10> EventMulti
-
- < int EventMulti (void) >
-
- C'est la fonction de principale de traitement des événements et de
- leur affectation à la bonne fenêtre ou fonction interne.
- Elle doit être employée dans une boucle sans fin, la sortie de
- l'application pouvant être gérée à l'aide d'une variable globale.
-
- Elle retourne le type d'événement venant d'être reçu.
-
-
- 5.3.11> FormAlert
-
- < void FormAlerte(index) >
-
- * int index..................... Numéro l'OBJECT contenant le message.
-
- Affiche une boîte d'alerte dont la description se trouve dans le
- fichier .RSC
-
-
- 5.3.12> GetCoord
-
- < void GetCoord (numObj, coord) >
-
- * int numObj.................... Numéro de l'objet WindGem.
- * GRECT *coord.................. coordonnées de la fenêtre.
-
- Permet de récupérer les coordonnées d'une fenêtre d'un type
- quelconque.
- Si l'objet n'existe pas, (GRECT *)NULL est placé dans <coord>.
-
-
- 5.3.13> GetHandle
-
- < int GetHandle (objet) >
-
- * int objet..................... Numéro de l'objet.
-
- Cette fonction retourne le handle d'une fenêtre gérée par WindGem
- ou BLANK si l'objet est inconnu ou qu'il n'a pas de handle.
-
-
- 5.3.14> GetObjet
-
- < int GetObjet(void) >
-
- Cette fonction à n'utiliser que dans une fonction de gestion d'une
- fenêtre permet de retourner le numéro de l'objet EXIT ou TOUCHECIT qui
- vient d'être sélecionné.
-
-
- 5.3.15> GetObject
-
- < OBJECT *GetObject(arbre) >
-
- * int arbre..................... Numéro d'un arbre d'objets
-
- Cette fonction permet de récupérer un pointeur sur la variable de
- type OBJECT associée à un arbre <arbre>.
- Elle peut être utile si l'utilisateur désire pouvoir accéder à des
- propriétés particulières des arbres d'objets (par exemple).
-
-
- 5.3.16> GetValeur
-
- < char *GetValeur(arbre, objet) >
-
- * int arbre..................... Numéro de l'arbre d'objets considéré
- * int objet..................... Numéro de l'objet dont on veut le contenu
-
- Cette fonction permet de récupérer le contenu de la zone texte d'un
- objet quelconque d'un formulaire.
-
-
- 5.3.17> GetVar
-
- < void *GetVar (numObj) >
-
- * int numObj.................... Numéro de l'objet WindGem.
-
- Cette fonction retourne la valeur de la variable <var> d'une
- structure WindUser. Var étant un pointeur.
-
-
- 5.3.18> GetWindText
-
- < int GetWindText (numTxt, ligne, nbcol) >
-
- * int numTxt................... Numéro de l'obet WTYPTEXT
- * char **ligne[]............... Pointeur sur une table de pointeurs sur les
- lignes de texte à inscrire dans la fenêtre.
- * int *nbcol................... Pointeur sur un entier contenant le nombre
- de colonne max. de la fenêtre.
- retourne le nombre de lignes de texte.
-
- Cette fonction permet de récupérer un pointeur sur le texte affiché
- dans une fenêtre Texte, la taille de la ligne max. et le nombre de lignes
- de texte.
-
-
- 5.3.19> GetWorkXYWH
-
- < void GetWorkXYWH (numObj, coord) >
-
- * int numObj................... Numéro de l'objet WindGem
- * GRECT *coord................. Coordonnées de la zone utilisable.
-
- Cette fonction remplace le wind_get (..., WF_WORKXYWH,...) du GEM.
- Elle retourne les coordonnées de la zone utilisable. Si la fenêtre contient
- un menu, la hauteur du menu sera soustraite de la zone utilisable.
- Il ne faut donc JAMAIS utiliser wind_get s'il y a un menu dans la fenêtre
- faute de quoi le menu risque d'être recouvert.
-
- ATTENTION : Cette fonction ne fait pas d'allocation mémoire.
-
-
- 5.3.20> PopMenu
-
- < void PopMenu(numObj, gerePopup)>
-
- * int numObj.................... Numéro de l'objet à utiliser
- * void (*gerePopup)(int option). Fonction de gestion du popup menu
-
- Cette fonction permet de déclarer un popup menu qui sera appelé
- lors de l'appui du bouton DROIT de la souris.
- L'option choisie sera envoyé en paramètre à la fonction <gerePopup>.
-
-
- 5.3.21> pop_up
-
- < void pop_up (arbre, obj, pu) >
-
- * int arbre..................... Numéro de l'arbre d'objet
- * int obj....................... Objet de l'arbre auquel est lié le popup
- * int pu........................ Numéro de l'arbre d'objet du popup
-
- Cette fonction est destinée à la gestion des popup menus.
- La valeur sélectionnée est automatiquement insérée dans la zone de
- donnée de l'objet <obj> du formulaire <arbre>.
-
- Cette fonction ne doit plus être utilisée pour le moment.
-
- 5.3.22> ObjcUnselect
-
- < void ObjcUnselect(arbre, numObj) >
-
- * int arbre..................... Numéro de l'arbre d'objets
- * in numObj..................... Numéro de l'objet (récupéré avec GetObjet)
-
- Cette fonction permet de désélectionner un objet.
-
-
- 5.3.23> SetSlider
-
- < void SetSlider (mode, echelle, position, text) >
-
- * int mode...................... Mode de fonctionnement
- * int echelle................... Valeur max. pouvant être atteinte
- * int position.................. position du slider
- * char *text.................... Texte à afficher.
-
- Cette fonction permet d'afficher et de gérer un objet Slider.
- Les trois mode de fonctionnement sont :
-
- SLIDINI : initialisation du Slider
- -> fournir echelle, position de départ et texte.
- SetSlider sauve le fond de l'écran et affiche
- l'objet Slider.
- SLIDAFF : gestion du Slider
- -> fournir position en cours
- Réaffiche l'objet Slider à la position souhaitée.
- SLIDEND : fin d'utilisation
- Réaffiche le fond de l'écran.
-
- Voir test.c pour un exemple d'utilisation.
-
-
- 5.3.24> SetValeur
-
- < void SetValeur(arbre, objet, valeur) >
-
- * int arbre..................... Numéro de l'arbre d'objets
- * int objet..................... Numéro de l'objet
- * char *valeur.................. Valeur à inscrire
-
- Cette fonction permet d'initialiser la zone texte d'un objet donné
- d'un formulaire.
-
-
- 5.3.25> SetWindText
-
- < SetWindText (numTxt, nblig, nbcol, ligne) >
-
- * int numTxt................... Numéro de l'obet WTYPTEXT
- * int nblig.................... Nombre de lignes de texte
- * int nbcol.................... Taille max. de la plus grande ligne
- * char **ligne................. Table de pointeurs sur les lignes de texte
- à inscrire dans la fenêtre.
-
- Cette fonction permet d'associer un texte à une fenêtre de type
- WTYPTEXT en lui donnant un pointeur sur chaque ligne du texte à afficher,
- le nombre de lignes et la taille de la plus longue ligne.
-
- * Lors de l'utilisation de cette fonction avec une fenêtre dont le
- contenu provient d'un fichier texte :
- -> il faut penser à éviter les débordements mémoires qui pourraient
- appaître lors de la modification du contenu d'une ligne de texte.
-
- * Dans le cadre d'une fenêtre dont le contenu est géré par
- l'utilisateur (paramètre file de WindTextInit NUL), celui-ci doit définir
- la zone mémoire qui contiendra le texte ET un tableau de pointeurs sur
- chacunes des lignes de texte. C'est ce tableau qui est fourni à SetWindText
- et récupéré par GetWindText.
- -> penser au problème d'allocation et de libération dynamique de
- la mémoire utilisée.
-
- Pour plus d'information, voir le programme d'exemple test.c
-
-
- 5.3.26> StGuide
-
- < void StGuide(fichierHyp, node) >
-
- * char *fichierHyp.............. Nom du fichier d'aide (pas de chemin)
- * char *node.................... Node à appeler
-
- Cette procédure permet de lancer ST-GUIDE (qui doit donc être
- lancé en tant qu'accessoire pour Single Tos ou en application pour un
- système multi-tache) et de se positionner sur un "noeud" particulier.
- (cf exemple dans test.c).
-
- REMARQUE : Le fichier d'aide doit se trouver au même niveau d'arborescence
- que l'application ou dans un répertoire qui se trouve à un niveau inférieur.
- Dans ce cas ajouter le chemin relatif au répertoire de l'application dans
- <fichierHyp>.
-
-
- 5.3.27> ToolBarSelect
-
- < void ToolBarSelect(arbre, numObjc, mode) >
-
- * int arbre..................... Numéro de l'objet WindGem.
- * int numObjc................... Objet du ToolBar à sélectionner.
- * int mode...................... Redessin (REDRAW) ou non (NODRAW).
-
-
- Cette fonction permet de sélectioner un objet d'une ToolBar se
- situant dans un objet quelconque WindGem.
-
-
- 5.3.28> ToolBarUnselect
-
- < void ToolBarUnselect(arbre, numObjc, mode) >
-
- * int arbre..................... Numéro de l'objet WindGem.
- * int numObjc................... Objet du ToolBar à désélectionner.
- * int mode...................... Redessin (REDRAW) ou non (NODRAW).
-
- Cette fonction permet de désélectioner un objet d'une ToolBar se
- situant dans un objet quelconque WindGem.
-
-
- 5.3.29> WindClose
-
- < int WindAlerte (icone, user_icn, texte, bouton, defaut) >
-
- * int icone..................... Numéro de l'icône ou ICN_USER
- * BITBLK *user_icn.............. Pointeur sur la structure contenant l'image
- * char *texte................... Texte du message
- * char *bouton.................. Texte des boutons
- * int defaut.................... Numéro du bouton défaut de la boîte.
-
- Cette fonction permet d'afficher un message d'alerte, contenant
- un titre + cinq autres lignes de texte, chacunes de ces lignes ne devant pas
- dépasser 60 caractères, et jusqu'à 4 boutons d'au maximum 20 caractères.
- Le caractère '|' permet de distinguer le texte de chaque ligne ou
- de chaque bouton.
- Si <icone> vaut ICN_USER, le champ <user_icn> est utilisé comme
- icône.
-
- Cette fonction retourne le numéro du bouton sélectionné (1 à 4).
-
-
- 5.3.30> WindClose
-
- < void WindClose(numObj) >
-
- * int numObj
-
- Cette fonction permet de fermer une fenêtre.
- C'est à ce moment qu'est déclenché l'événement EV_CLOSE qui peut
- être traité ou non par l'utilisateur.
-
-
- 5.3.31> WindDelete
-
- < void WindDelete(numObj) >
-
- * int numObj
-
- Cette fonction permet de détruire une fenêtre.
- C'est à ce moment qu'est déclenché l'événement EV_CLOSE qui peut
- être traité ou non par l'utilisateur.
-
- Cette fonction a été rendue disponible pour des évolutions futures
- mais n'a pas à être utilisée pour le moment. Toutes les fenêtres étant
- automatiquement détruites à la fin de l'application par AppExit.
-
-
- 5.3.32> WindDraw
-
- < void WindDraw(arbre, objet) >
-
- * int arbre..................... Arbre d'objet considéré
- * int objet..................... Objet à redessiner
-
- Cette fonction, écrite par Olivier Landemarre, permet de redessiner
- l'objet <objet> dans l'arbre <arbre> que la fenêtre soit TOPPED ou non.
-
-
- 5.3.33> WindFormInit
-
- < void WindFormInit(numObj, mode, inf_x, inf_y, title, edit, fonct) >
-
- * int numObj.................... Numéro de l'arbre d'objets
- * int mode...................... Mode d'affichage WNORM ou WMODAL
- * int inf_x..................... Position X à l'ouverture ou 0
- * int inf_y..................... Position Y à l'ouverture ou 0
- * char *title................... Titre de la fenêtre
- * int edit...................... Numéro du premier objet éditable ou 0
- * void (*fonct)(int evnt));..... Fonction de gestion de la fenêtre
-
- La fonction de gestion de la fenêtre doit être organisée comme suit :
-
- void gereForm(int evnt)
- {
- int choix;
-
- if (evnt == EV_OPEN)
- {
- Traitement à effectuer avant l'ouverture de la fenêtre
- }
- if (evnt == EV_CLOSE)
- {
- Traitement à effectuer avant la fermeture de la fenêtre
- non disponible pour un formulaire modal.
- ATTENTION : ne pas fermer la fenêtre à ce niveau
- }
- if (evnt & MU_BUTTON)
- {
- Traitement des événements bouton
- }
- }
-
- Note : un événement BUTTON est généré lors de l'utilisation d'un raccourcis
- clavier dans un formulaire.
-
-
- 5.3.34> WindOpen
-
- < void WindOpen(numObj) >
-
- * int numObj.................... Numéro de l'arbre d'objet à ouvrir
-
- Cette fonction permet d'ouvrir une fenêtre.
- C'est à ce moment qu'est déclenché l'événement EV_OPEN qui peut
- être traité ou non par l'utilisateur.
-
-
- 5.3.35> WindTextInit
-
- < int WindTextInit (file, Fpos, title) >
-
- * char *file.................... Nom du fichier texte,
- * GRECT *Fpos................... Coordonnée de départ de la fenêtre Texte,
- * char *title................... Titre optionnel de la fenêtre.
-
- Initialisation et ouverture du'une fenêtre texte.
-
- Un appui sur <escape> permet de fermer la fenêtre et le défilement
- du texte peut être contrôlé par les touches fléchées. Appuyer sur <HELP>
- pour de plus amples informations.
- Cette fonction retourne le numéro associé à la fenêtre Texte
- nouvellement créée.
-
- NOTE : Actuellement, la fenêtre est détruite à la fermeture si on
- utilise le bouton Close de la fenêtre !
- ------------
- Maintenant il est possible de modifier le contenu de la fenêtre à
- l'aide des fonctions GetWindText et SetWindText.
-
-
- 5.3.36> WindUserInit
-
- < int WindUserInit (attrib, pos, title, init, exit, message, clavier,
- souris, var) >
-
- * int attrib.................... Attributs de la fenêtre.
- * GRECT pos..................... Coordonnées de départ de la fenêtre.
- * char *title................... Titre de la fenêtre.
- * void (*init)()................ Fonction d'initilisation (ouverture).
- * void (*exit)()................ Fonction de libération (fermeture).
- * void (*message)(int evnt, int buff[8])
- Gestion des événements MU_MESAG.
- * void (*clavier)(int kbd, int key)
- Gestion des événements MU_KEYBD.
- * void (*souris)(int x, int y, int k, int nb)
- Gestion des événements MU_BUTTON.
- * void *var..................... Ptr sur une structure utilisateur.
-
- Cette fonction permet d'initialiser une fenêtre "Utilisateur"
- d'attributs <attrib> donnés.
- De fait il faut fournir un ensemble de fonctions qui permettront de
- gérer les événements qui lui seront envoyées par le système (<message>,
- <clavier>, <souris>) de préparer l'ouverture (<init>) et la fermeture de
- la fenêtre (<exit>). Toutes ces fonctions peuvent êtres NULLes.
- <var> permet de contenir un ensemble de variables que l'utilisateur
- voudra joindre à sa fenêtre pour ses besoins.
-
- Cette fonction retourne le numéro associé à la fenêtre Utilisateur
- nouvellement créée.
-
- ATTENTION : NE PAS PERDRE CE NOMBRE SINON IL N'EST PLUS POSSIBLE
- D'OUVRIR OU DE FERMER CETTE FENETRE (sauf à la fin de l'application) !!
-
-
- Traitement des événements :
- - Les événements MU_KEYBD sont décomposés en événements MU_KEYBD et
- MU_MESAG dans le cas de l'appui sur l'une des touches spéciales.
- WindGem fournit daux paramètres :
- * kbd : touches mortes utilisées (SHIFTs, CONTROL, ALTERNATE...).
- * key : code SCAN + ASCII de la touche enfoncée.
-
- - Les événements MU_BUTTON sont renvoyés à l'utilisateur par
- l'intermédiaire de plusieurs paramètres :
- * x, y, k : Position de la souris et bouton(s) appuyés.
- * nb : nombre de clics.
-
- - Les événements MU_MESAG sont pré-traités par WindGem et plus
- particulièrement dans la fonction WindUserDo du module GemUser.C
- * WM_REDRAW : si la fenêtre contient un menu, son réaffichage est
- effectué automatiquement et les coordonnées de la zone à redessiner sont
- modifiées pour que l'utilisateur ne risque pas de couvrir le menu au cours
- de son redessin. L'événement est renvoyé à l'utilisateur.
- * WM_TOPPED : Traitement automatique. L'événement n'est pas envoyé
- à l'utilisateur.
- * WM_CLOSED : Traitement automatique par appel à la fonction
- WindClose, non sans avoir au préalable exécuté la fonction exit définie par
- l'utilisateur. L'événement n'est pas envoyé à l'utilisateur.
- * WM_MOVED : Traitement automatique. L'événement est renvoyé à
- l'utilisateur pour qu'il puisse effectuer un traitement personnalisé.
- * WM_SIZED : Traitement automatique. L'événement est renvoyé à
- l'utilisateur pour qu'il puisse effectuer un traitement personnalisé.
- * WM_FULLED : Traitement automatique. L'événement est renvoyé à
- l'utilisateur pour qu'il puisse effectuer un traitement personnalisé.
- * WM_ICONIFY : L'iconification et le redessin son traités par
- WindUserDo sans renvoi de l'événement à l'utilisateur.
- * WM_UNICONIFY : La désiconification est traités par WindUserDo.
- Le redessin suivant est renvoyé à l'utilisateur pour qu'il le traite.
-
- En paramètre, l'utilisateur reçoit toujours :
- * evnt : Le type de l'événement.
- * buff : le tableau d'entier renvoyé par evnt_multi du GEM. Pour
- la signification de son contenu, se référer à la documentation GEM.
-
-
- 5.3.37> wmenu_icheck
-
- < void wmenu_icheck (numObj, obj, etat) >
-
- * int numObj.................... Numéro de l'objet WindGem (fomulaire,
- texte...).
- * int obj....................... Numéro de l'objet dans le menu.
- * int etat...................... 0 désactive, 1 active.
-
- Cette fonction est l'équivalente de menu_icheck du GEM et permet
- donc d'inverser l'état d'une option d'un menu en fenêtre.
-
-
- 5.4> Fonctions utilitaires diverses
-
- 5.4.1> convdate
-
- < void convdate (date, fdate) >
-
- * char *date.................... Date sous forme d'une chaîne de caractères
- * unsigned int *fdate........... Date de type fichier
-
- Convertit une chaîne de caractères en format date.
-
-
- 5.4.2> cre_fichier
-
- < void cre_fichier(chemin, fic, fichier) >
-
- * char *chemin.................. Path
- * char *fic..................... fichier 12.3
- * char *fichier................. Chaine résultante
-
- Crée un nom de fichier par concaténation d'un PATH et d'un nom de
- fichier.
-
-
- 5.4.3> EnvoiRedraw
-
- < void EnvoiRedraw(handle, x, y, w, h) >
-
- * int handle.................... Handle de la fenêtre
- * int x,y,w,h................... Coordonnées de la zone à redessiner
-
- Cette fonction permet d'envoyer un signal de redraw à une fenêtre.
- Le handle d'une fenêtre peut être obtenu avec la fonction GetHandle.
-
-
- 5.4.4> exist
-
- < long exist (name, att) >
-
- * name.......................... Nom du fichier
- * att........................... Attribut
-
- Teste l'existence d'un fichier. Si celui-ci existe retourne sa
- longueur ou TRUE si c'est un répertoire.
-
-
- 5.4.5> extention
-
- < void extension (filename, ext) >
-
- * char *filename................ Nom du fichier
- * char *ext..................... Extention
-
- Change l'extention d'un fichier <filename> par <ext>
- ATTENTION : <ext> doit contenir le '.'
-
-
- 5.4.6> get_text
-
- < char *get_text (adr, object) >
-
- * OBJECT *adr................... Arbre d'objets
- * int object.................... Numéro d'un objet
-
- Cette fonction permet de récupérer le contenu de la zone texte d'un
- objet quelconque d'un formulaire.
-
-
- 5.4.7> GetCharSize
-
- < void GetCharSize (Wchar, Hchar) >
-
- * int *Wchar.................... Largeur d'un caractère
- * int *Hchar.................... Hauteur d'un caractère
-
- Cette fonction retourne les dimensions de la police de caractères
- employée par l'AES. Voir la fonction graf_handle de l'AES.
-
-
- 5.4.8> GetDeskXYWH
-
- < void GetDeskXYWH (Xdesk, Ydesk, Wdesk, Hdesk) >
-
- * int *Xdesk.................... Position X du bureau (normalement 0)
- * int *Ydesk.................... Position Y du bureau (normalement 0)
- * int *Wdesk.................... Largeur du bureau.
- * int *Hdek..................... Hauteur du bureau.
-
- Cette fonction retourne les dimensions du bureau GEM.
-
-
- 5.4.9> GetVideoRes
-
- < void GetVideoRes (Xres, Yres, Nplane) >
-
- * int *Xres..................... Résolution en X de l'écran
- * int *Yres..................... Résolution en Y de l'écran
- * int *Nplane................... Nombre de plans de couleurs
-
- Cette fonction renvoie les dimensions de l'écran vidéo et sa
- profondeur. Ces paramètres sont normalement obtenus avec v_opnvwk et
- vq_extnd.
-
-
- 5.4.10> litdate
-
- < void litdate (dat, fdate) >
-
- * char *dat..................... chaine qui contiendra la date
- * unsigned int fdate............ ZERO = retourne la date systeme
- <> ZERO = retourne fdate sous forme de date
-
- Retourne la date système ou d'un fichier sous la forme d'une
- chaîne de caractères.
-
-
- 5.4.11> Sauvegarde / Restauration d'une zone de l'écran
-
- < void get_bkgr (of_x, of_y, of_w, of_h, img) >
- < void put_bkgr (of_x, of_y, of_w, of_h, img) >
-
- * int of_x...................... Position X de la zone à copier
- * int of_y...................... Position Y
- * int of_w...................... Largeur
- * int of_h...................... Hauteur
- * MFDB *img..................... Variable qui va contenir l'image
-
- Sauvegarde puis restauration d'une portion d'écran.
-
-
- 5.4.12> selector
-
- < int selector (chemin, ext, file, title) >
-
- * char *chemin.................. Path
- * char *ext..................... Extention
- * char *file.................... Nom du fichier
- * Char *title................... Titre pour sélecteur de fichier
-
- Appelle et gère le sélecteur de fichier. Retourne ne chemin et le
- nom du fichier.
-
-
- 5.4.13> set_text
-
- < void set_text (adr, object, string) >
-
- * OBJECT *adr................... Arbre d'objets
- * int object.................... Numéro d'un objet
- * char *string.................. Valeur à inscrire
-
- Cette fonction permet d'initialiser la zone texte d'un objet donné
- d'un formulaire.
-
-
- 5.4.14> strcomplete
-
- < char *strcomplete (chaine, lng, car, sens) >
-
- * char *chaine.................. Chaine à compéter
- * int lng....................... Longueur à atteindre
- * char car...................... Caractère à utiliser pour la compléter
- * char sens..................... INS_AVANT / INS_APRES
-
- Insère avant (INS_AVANT) ou après (INS_APRES) autant de <car> que
- nécessaire pour avoir une chaine de taille <lng>
-
-
- 5.4.15> strcopy
-
- < char *strcopy(res, chaine, deb, fin) >
-
- * char *res..................... Chaine résultante
- * char *chaine.................. Chaine à recopier
- * int deb....................... Position de début de la copie dans chaine
- * int fin....................... Position de fin de la copie
-
- Copie <chaine> dans <res> de la position <deb> à la position <fin>.
-
- Retourne res ou (char *)NULL si un problème est rencontré.
- (ex. deb > fin).
-
-
- 5.4.16> strinsert
-
- < char *strinsert (chaine, ch) >
-
- * chaine........................ Chaine de base
- * ch............................ Chaine à insérer
-
- Insert <ch> avant la chaine <chaine>.
- Retourne le résultat.
- ATTENTION : chaine doit être suffisamment longue pour contenir le
- résultat et ne pas dépasser 256 caractères.
-
-
- 5.4.17> strleft
-
- < char *strleft (res, chaine, nb) >
-
- * char *res..................... Chaine résultante
- * char *chaine.................. Chaine de départ
- * int nb........................ Nombre de caractères à traiter
-
- Cette fonction permet de copier dans <res> les <nb> caractères de
- gauche de <chaine>. <res> est retourné par la fonction.
- Elle fait appel à la fonction strcopy.
-
-
- 5.4.18> strmid
-
- < char *strmid (res, chaine, deb, nb) >
-
- * char *res..................... Chaine résultante
- * char *chaine.................. Chaine de départ
- * int deb....................... position de départ
- * int nb........................ Nombre de caractères à traiter
-
- Cette fonction permet de copier dans <res> <nb> caractères à partir
- de la position <deb>. <res> est retourné par la fonction.
- Elle fait appel à la fonction strcopy.
-
-
- 5.4.19> strnpcpy
-
- < char *strnpcpy(dest, start, stop) >
-
- * char *dest.................... Chaine résultante
- * char *start................... Chaine de départ
- * char *stop.................... Chaine de fin
-
- Fonction de bibliotheque : Copie dans "dest" la portion de chaine a
- partir du pointeur "start", jusqu'au caractere place juste avant le
- pointeur "stop". "start" et "stop" doivent obligatoirement pointer dans la
- meme chaine. Dans tous les cas "dest" est terminee par le caractere de fin
- de chaine '\0'.
-
- Elle remplace la fonction <strpcpy> du sozobonX qui ne marche pas
- correctement.
-
-
- 5.4.20> strright
-
- < char *strright (res, chaine, nb) >
-
- * char *res..................... Chaine résultante
- * char *chaine.................. Chaine de départ
- * int nb........................ Nombre de caractères à traiter
-
- Cette fonction permet de copier dans <res> les <nb> caractères de
- droite de <chaine>. <res> est retourné par la fonction.
- Elle fait appel à la fonction strcopy.
-
-
- 5.4.21> trim
-
- < char *trim (str) >
-
- * char *str..................... Chaine à traitée
-
- Supprime les espaces inutiles en début et fin de chaîne.
-
-
- 5.5> Conclusion
-
- Voilà, c'est fini pour l'instant. Vous avez vu , c'est pas
- compliqué à utiliser. Il y a encore peu de fonctionnalité disponibles mais
- de nouvelles sont en cours de préparation, toujours aussi simple à utiliser.
-
- Vous trouverez dans l'archive un exemple appelé simplement TEST.
- Il ne sert à rien mais utilise toutes les fonctions précédentes.
- Vous remarquerez cependant que j'envisage d'en faire un programme de gestion
- de bibliohèque personnel. C'est d'ailleur la raison pour laquelle il me
- fallait une librairie GEM étendue.
-
-
- <=-----------------------------------------------------------------------=>
- 6> Evolutions futures
-
- - gestion simple de l'affichage d'un fichier image dans une
- fenêtre (type de fenêtre WTYPGRAP),
- - rajout de nouveaux objets Userdefs (nouveaux boutons popup,
- listbox...),
- - gestion de la liste des fenêtres actives non préemptives,
- - Liaison avec ST-GUIDE pour l'aide,
- - d'autres évolutions en fonction de mon temps et des idées qui me
- viendront à l'esprit et de celles que vous me soumettrez,
- - ...
-
-
- <=-----------------------------------------------------------------------=>
- 7> Retour
-
- Il s'agit pour moi d'un point TRES important. En effet, je ne suis
- pas un spécialiste du GEM et il est clair que mes fonctions ne sont pas
- écrites de la manière la plus optimale possible.
-
- Je compte donc sur vous pour me signaler les éventuelles erreurs
- qui pourraient m'avoir échappé, les éventuelles améliorations à apporter,
- toute idée qui pourrait faire progresser cette librairie.
-
-
- Si mon travail peut servir, ne serait-ce qu'à UN seul utilisateur,
- mes efforts n'auront pas servi à rien.
-
-
- Philippe CASTELLA
-
-
-
- Email : pcastell@ifhamy.insa-lyon.fr (pour encore un an)
- Http : http://www.insa-lyon.fr/People/AEDI/pcastell (idem, après ???)
- Snail : 49, rue Jean Jaurès (de préférence)
- 69740 Genas
- FRANCE
-
- (C) 1996 Philippe CASTELLA
-